﻿#define _CRT_SECURE_NO_WARNINGS
//作者：宋安康
#include<stdio.h>

//联合体
//联合的成员是共⽤同⼀块内存空间的，这样⼀个联合变量的⼤⼩，⾄少是最⼤成员的⼤⼩（因为联合
//⾄少得有能⼒保存最⼤的那个成员）。
//int main() 
//{
//
//	printf("hello world\n");
//	return 0;
//}

//union Un1
//{
//	char c[5];//1 8 1
//	int i;   //4 8 4
//};
//union Un2
//{
//	short c[7];
//	int i;
//};
//int main()
//{
//	//下⾯输出的结果是什么？
//	printf("%d\n", sizeof(union Un1));  //8
//	//联合体也存在对齐
//	printf("%d\n", sizeof(union Un2));
//	return 0;
//}

//struct gift_list
//{
//	int stock_number;//库存量
//	double price; //定价
//	int item_type;//商品类型
//
//	union {
//		struct
//		{
//			char title[20];//书名
//			char author[20];//作者
//			int num_pages;//⻚数
//		}book;
//		struct
//		{
//			char design[30];//设计
//		}mug;
//		struct
//		{
//			char design[30];//设计
//			int colors;//颜⾊
//			int sizes;//尺⼨
//		}shirt;
//	}item;
//};
//
//union  U
//{
//	int a;    //S与a共用一块空间
//	//通过char每次取一个字节
//	struct S
//	{
//		char c1;
//		char c2;
//		char c3;
//		char c4;
//	}s;  //4
//};
//int main() 
//{
//	//int a = 0x11223344;
//	//四个字节
//	union U u = {0};
//	u.a = 0x11223344;
//	printf("%x  %x  %x  %x\n",u.s.c1,u.s.c2,u.s.c3,u.s.c4);
//	return 0;
//}

//写一个代码，判断当前机器是大端还是小端
//int check_sys() 
//{
//	int n = 1; //01 00 00 00     00 00 00 01
//	return *(char*)&n;
//}

//int check_sys()
//{
//	union 
//	{
//		char c;
//		int  i;
//	}u;
//	u.i = 1;
//
//	return u.c;
//}

//int main() 
//{
//	int ret = check_sys();
//	if (ret == 1)
//	{
//		printf("小端\n");
//	}
//}

//枚举 -- 一一列举
//enum Sex
//{
//	//列举枚举的可能取值
//	MALE = 5,  //初始值
//	FEMALE = 8,
//	SECRE = 10
//	//是常量
//};

#define MAX 10;   //定义常量

//枚举的优点：
//1. 增加代码的可读性和可维护性
//2. 和#define定义的标识符⽐较枚举有类型检查，更加严谨。
//3. 便于调试，预处理阶段会删除 #define 定义的符号
//4. 使⽤⽅便，⼀次可以定义多个常量
//5. 枚举常量是遵循作⽤域规则的，枚举声明在函数内，只能在函数内使⽤

//int main() 
//{
//	printf("%d\n",MALE);
//	printf("%d\n",FEMALE);
//	printf("%d\n",SECRE);
//	//MALE = 9;不能更改
//	enum Sex s = MALE;
//	s = FEMALE;  //只能用枚举常量，不能用其他的
//	return 0;
//}

//动态内存管理  --- 重要（数据结构）：1，指针  2，结构体  3，动态内存管理
//void* malloc (size_t size);
#include<assert.h>
#include<stdlib.h>
int main() 
{
	int n = 0;
	char ch = 'a';

	//数组    ----存放一个班级的成绩
	int arr[10] = { 0 };  //开辟的空间的大小有局限性
	int* p = (int *)malloc(40);   //申请40个字节的空间 ----返回值为void*
	//assert(p!=NULL);
	if (p == NULL)
	{
		perror("malloc");
		return 1;
	}
	//
	for (int i = 0; i < 10; i++)
	{
		*(p + i) = i;

	}
	for (int j = 0; j < 10; j++)
	{
		printf("%d\n",*(p+j));
	}
	
	return 0;
}